package modelo.bd.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.bd.StoredProcedure;
import modelo.bd.exception.DAOException;

public class NotificaDAO extends AbstractDAO<String[]> {

    @Override
    public void add(String[] entity) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void deleteWhere(String condition) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void update(String[] entity) throws DAOException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    protected ArrayList<String[]> select() throws DAOException {
        try {
            con.crear();
            ResultSet resultado = con.ejecutarConsulta(getQuery());
            int columnas = resultado.getMetaData().getColumnCount();
            ArrayList<String[]> resultados = new ArrayList<String[]>();
            while (resultado.next()) {
                String[] fila = new String[columnas];
                for (int i = 1; i <= columnas; i++) {
                    fila[i - 1] = resultado.getString(i);
                }
                resultados.add(fila);
            }
            resultado.close();
            con.cerrar();
            return resultados;
        } catch (ClassNotFoundException ex) {
            throw new DAOException("Error al crear la conexion " + ex.getMessage());
        } catch (SQLException ex) {
            throw new DAOException("Error en DAO Notificaciones " + ex.getMessage());
        } catch (Exception ex) {
            throw new DAOException("Error en el archivo de propiedades " + ex.getMessage());
        }
    }

    @Override
    public ArrayList<String[]> selectAll() throws DAOException {
        this.setQuery("SELECT noti_servidor servidor, noti_mail_envia clave, "
                + "       noti_nombre_envia nombre, deno_mail para, noti_descripcion asunto "
                + "FROM   scc_notificaciones, scc_detalle_notificaciones "
                + "WHERE  noti_clave      = (SELECT pasi_parametro1 "
                + "                          FROM   scc_parametros_sistema "
                + "                          WHERE  pasi_parametro     = 192 "
                + "                          AND    pasi_planta_bodega = '001' "
                + "                          AND    pasi_consecutivo   = 1) "
                + "AND    deno_noti_clave = noti_clave");
        return select();
    }

    @Override
    public ArrayList<String[]> selectWhere(String condition) throws DAOException {
        this.setQuery("SELECT noti_servidor servidor, noti_mail_envia clave, "
                + "       noti_nombre_envia nombre, deno_mail para, noti_descripcion asunto "
                + "FROM   scc_notificaciones, scc_detalle_notificaciones "
                + "WHERE   " + condition);
        return select();
    }

    public ArrayList<String[]> remitentes() throws DAOException {
        this.setQuery("SELECT deno_mail as para "
                + "FROM   scc_detalle_notificaciones "
                + "WHERE  deno_noti_clave = (SELECT pasi_parametro1 "
                + "                          FROM   scc_parametros_sistema "
                + "                          WHERE  pasi_parametro     = 192 "
                + "                          AND    pasi_planta_bodega = '001' "
                + "                          AND    pasi_consecutivo   = 1)");
        return select();
    }

    public String[] obtenterParametros() throws DAOException {
        this.setQuery("SELECT noti_servidor AS servidor, noti_mail_envia AS clave, "
                + "       noti_nombre_envia AS nombre, noti_descripcion AS asunto, 'text/html' AS tipo "
                + "FROM   scc_notificaciones "
                + "WHERE  noti_clave = (SELECT pasi_parametro1 "
                + "                     FROM   scc_parametros_sistema "
                + "                     WHERE  pasi_parametro     = 192 "
                + "                     AND    pasi_planta_bodega = '001' "
                + "                     AND    pasi_consecutivo   = 1)");
        return select().get(0);
    }

    public String enviarCorreo(String[] parametros, String remitentes, String mensaje) throws DAOException {
        try {
            String salida = "";
            StoredProcedure sp = new StoredProcedure("SCC_P_ENVIA_MAIL_SMTP", 8);
            sp.crearSP();
            sp.parametroIN(1, parametros[0]);
            sp.parametroIN(2, parametros[1]);
            sp.parametroIN(3, parametros[2]);
            sp.parametroIN(4, remitentes);
            sp.parametroIN(5, parametros[3]);
            sp.parametroIN(6, mensaje);
            sp.parametroIN(7, parametros[4]);
            sp.parametroOUT(8, "");
            sp.ejecutar();
            salida = (String)sp.getResultado(8, "");
            //salida = sp.ejecutar().toString();
            sp.cerrar();
            return salida;
        } catch (Exception ex) {
            throw new DAOException("Error en DAO Enviar correo " + ex.getMessage());
        }
    }
}
